package br.ufmt.model;

import java.util.Date;
import java.util.List;
import java.util.ArrayList;

import br.ufmt.exception.EnderecoException;
import br.ufmt.exception.PessoaException;

public class Cliente extends Pessoa {
	
	public final static List<Cliente> clientes = new ArrayList<Cliente>();
	
	public Cliente() { super(); }
	
	public Cliente(String nome, Date dataNascimento, String cpf,
			String telefone, SexoEnum sexo) throws PessoaException {
		super(nome, dataNascimento, cpf, telefone, sexo);
	}
	
	/**
	 * Guarda uma refer�ncia do objeto em um vetor
	 */
	public void salvar() {
		if (!clientes.contains(this))
			clientes.add(this);
	}
	
	/**
	 * Remove do vetor a refer�ncia ao objeto
	 */
	public void excluir() {
		clientes.remove(this);
	}
	
	/**
	 * Busca Clientes baseado no nome
	 * @param nome nome do cliente a ser utilizado na busca
	 * @return Lista de Clientes que atendem o nome informado
	 */
	public static List<Cliente> getClientePorNome(String nome) {
		List<Cliente> resultado = new ArrayList<Cliente>();
		for (Cliente c : clientes) {
			if (c.getNome().toUpperCase().indexOf(nome.toUpperCase())>=0)
				resultado.add(c);
		}
		return resultado;
	}
	
	/**
	 * Busca de clientes pela data de nascimento
	 * @param dataNascimento a ser utilizada na pesquisa
	 * @return Lista de clientes que nasceram nessa data
	 */
	public static List<Cliente> getClientePorDataNascimento(Date dataNascimento) {
		List<Cliente> resultado = new ArrayList<Cliente>();
		for (Cliente c : clientes) {
			if (c.getDataNascimento().equals(dataNascimento))
				resultado.add(c);
		}
		return resultado;
	}
	
	/**
	 * Busca de clientes pelo CPF
	 * @param cpf a ser utilizada na pesquisa
	 * @return Cliente
	 */
	public static Cliente getClientePorCpf(String cpf) {
		for (Cliente c : clientes) {
			if (c.getCpf().equals(cpf))
				return c;
		}
		return null;
	}	
	
	static {
		try {
			Cliente cliente = new Cliente("Joao Paulo", new Date(),"321.123.321-31","(65) 3214-1234",SexoEnum.MASCULINO);
			cliente.setCidade(Cidade.getCidadePorNome("Cuiab�"));
			cliente.setBairro("Jardim");
			cliente.setCep("78.000-000");
			cliente.setComplemento("Torre X, Apto Y");
			cliente.setLogradouro("Rua Prof. Araes");
			cliente.setNumero("13");
			cliente.salvar();
			
			cliente = new Cliente("Maria", new Date(),"321.123.321-32","(65) 3214-1234",SexoEnum.FEMININO);
			cliente.setCidade(Cidade.getCidadePorNome("Campo Grande"));
			cliente.setBairro("Bairro");
			cliente.setCep("78.000-000");
			cliente.setComplemento("Torre Y, Apto X");
			cliente.setLogradouro("Rua Qualquer");
			cliente.setNumero("243");
			cliente.salvar();
		} catch (PessoaException e) {
			e.printStackTrace();
		} catch (EnderecoException e) {
			e.printStackTrace();
		}
			
	}
	
}
